# 给你一个数组 nums 。nums 的源数组中，所有元素与 nums 相同，但按非递减顺序排列。
#
# 如果nums 能够由源数组轮转若干位置（包括 0 个位置）得到，则返回 true ；否则，返回 false 。
#
# 源数组中可能存在 重复项 。
#
# 注意：我们称数组 A 在轮转 x 个位置后得到长度相同的数组 B ，当它们满足 A[i] == B[(i+x) % A.length] ，其中 % 为取余运算。
#
#
# 来源：力扣（LeetCode）
# 链接：https://leetcode-cn.com/problems/check-if-array-is-sorted-and-rotated
# 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处.
from typing import List


class Solution:
    def check(self, nums: List[int]) -> bool:
        if sorted(nums) == nums:
            return True
        if len(nums) == 2:
            return True
        i = 0
        while i < len(nums) - 1 and nums[i] <= nums[i + 1]:
            i += 1
        temp = nums[i + 1:] + nums[:i + 1]
        return sorted(temp) == temp


if __name__ == '__main__':
    sol = Solution()
    print(sol.check([3, 4, 5, 1, 2]))
